package com.zrkizzy.hashmap;

import java.util.*;

/**
 * 349. 两个数组的交集
 *
 * @author zhangrongkang
 * @since 2022/11/22
 * @see <a href="https://leetcode.cn/problems/intersection-of-two-arrays/description/">https://leetcode.cn/problems/intersection-of-two-arrays/description/</a>
 */
public class 两个数组的交集 {

    class Solution01 {
        // 哈希表
        public int[] intersection(int[] nums1, int[] nums2) {
            // 定义哈希表
            Map<Integer, Integer> map = new HashMap<>();
            // 遍历第一个数组
            for (int num : nums1) {
                map.put(num, 1);
            }
            // 定义返回结果集
            List<Integer> result = new ArrayList<>();
            // 遍历第二个数组
            for (int num : nums2) {
                if (map.containsKey(num) && map.get(num) > 0) {
                    result.add(num);
                    // 更新元素数量
                    map.put(num, 0);
                }
            }
            return result.stream().mapToInt(Integer::valueOf).toArray();
        }
    }

    class Solution02 {

        // 哈希表 + Set集合
        public int[] intersection(int[] nums1, int[] nums2) {
            // 定义哈希表
            Map<Integer, Integer> map = new HashMap<>();
            // 遍历第一个数组
            for (int num : nums1) {
                map.put(num, 0);
            }
            // 定义返回结果集
            Set<Integer> set = new HashSet();
            // 遍历第二个数组
            for (int num : nums2) {
                if (map.containsKey(num)) {
                    set.add(num);
                }
            }
            // 将set中的值存储到数组中
            int[] result = new int[set.size()];
            Iterator<Integer> iterator = set.iterator();
            int index = 0;
            while (iterator.hasNext()) {
                result[index++] = iterator.next();
            }
            return result;
        }
    }
}
